{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x273ea144b70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.random.uniform(-3, 3, size=100)\n",
    "X = x.reshape(-1, 1)\n",
    "y = 0.5 * x**2 + x + 2 + np.random.normal(0,1,size=100)\n",
    "\n",
    "plt.scatter(X, y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 线性回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5425281132991715"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "lin_reg = LinearRegression()\n",
    "lin_reg.fit(X, y)\n",
    "lin_reg.score(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x273eaf68438>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "y_predict = lin_reg.predict(X)\n",
    "plt.scatter(X, y)\n",
    "plt.plot(X, y_predict, color='r')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 对比 1次线性回归 和 2次多项式回归 的均方误差(不用R方)\n",
    "from sklearn.metrics import mean_squared_error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2.9160480224818555"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mean_squared_error(y, y_predict)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 多项式回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "\n",
    "def PolynomialRegression(degree):\n",
    "    return Pipeline([\n",
    "        ('poly', PolynomialFeatures(degree=degree)),\n",
    "        ('std_scaler', StandardScaler()),\n",
    "        ('lin_reg', LinearRegression())\n",
    "    ])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pipeline(memory=None,\n",
       "     steps=[('poly', PolynomialFeatures(degree=2, include_bias=True, interaction_only=False)), ('std_scaler', StandardScaler(copy=True, with_mean=True, with_std=True)), ('lin_reg', LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False))])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly2_reg = PolynomialRegression(degree=2)\n",
    "poly2_reg.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8781166147234594"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y2_predict = poly2_reg.predict(X)\n",
    "mean_squared_error(y, y2_predict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x273eb254048>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(X, y)\n",
    "plt.plot(np.sort(x), y2_predict[np.argsort(x)], color='r')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5293342320864095"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly2_reg = PolynomialRegression(degree=100)\n",
    "poly2_reg.fit(X, y)\n",
    "\n",
    "y2_predict = poly2_reg.predict(X)\n",
    "mean_squared_error(y, y2_predict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x273eb221860>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(X, y)\n",
    "plt.plot(np.sort(x), y2_predict[np.argsort(x)], color='r')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x273ea159048>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X_plot = np.linspace(-3,3,100).reshape(100,1)\n",
    "y_plot = poly2_reg.predict(X_plot)\n",
    "\n",
    "plt.scatter(X, y)\n",
    "plt.plot(X_plot[:, 0], y_plot, color='r')\n",
    "plt.axis([-3,3, -1, 10])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 测试数据集的意义\n",
    "\n",
    "由上面的过拟合例子可以看出来, 在来新的测试数据, 模型预测能力变得很差, 说明模型的泛化能力弱, 存在过拟合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3.524245643805075"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lin_reg = LinearRegression()\n",
    "lin_reg.fit(X_train, y_train)\n",
    "y_predict = lin_reg.predict(X_test)\n",
    "mean_squared_error(y_test, y_predict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.6544144044722754"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly2_reg = PolynomialRegression(degree=2)\n",
    "poly2_reg.fit(X_train, y_train)\n",
    "y2_predict = poly2_reg.predict(X_test)\n",
    "mean_squared_error(y_test, y2_predict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "53.24543075438962"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly10_reg = PolynomialRegression(degree=15)\n",
    "poly10_reg.fit(X_train, y_train)\n",
    "y10_predict = poly10_reg.predict(X_test)\n",
    "mean_squared_error(y_test, y10_predict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
